package com.zx.notification.producer.config;

import jakarta.jms.ConnectionFactory;
import lombok.Getter;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsTemplate;

/**
 * ActiveMQ生产者配置类
 * 用于读取和管理ActiveMQ生产者相关的配置参数
 */
@RefreshScope // 支持Nacos的动态刷新功能
@Configuration
@Getter
public class ActiveMqProducerConfig {
    /**
     * ActiveMQ是否启用，控制是否启用ActiveMQ消息队列功能
     */
    @Value("${spring.activemq.enabled:true}")
    private boolean enabled;

    /**
     * ActiveMQ Broker URL，用于连接ActiveMQ Broker服务
     */
    @Value("${spring.activemq.broker-url}")
    private String brokerUrl;

    /**
     * ActiveMQ用户名，用于认证连接到ActiveMQ服务
     */
    @Value("${spring.activemq.user}")
    private String user;

    /**
     * ActiveMQ密码，用于认证连接到ActiveMQ服务
     */
    @Value("${spring.activemq.password}")
    private String password;

    /**
     * ActiveMQ连接池是否启用，控制是否使用连接池来管理ActiveMQ连接
     */
    @Value("${spring.activemq.pool.enabled}")
    private boolean poolEnabled;

    /**
     * ActiveMQ连接池最大连接数，控制连接池中最大活跃连接数量
     */
    @Value("${spring.activemq.pool.max-connections}")
    private int maxConnections;

    /**
     * ActiveMQ连接池空闲连接超时时间(毫秒)，控制连接池中空闲连接的超时时间
     */
    @Value("${spring.activemq.pool.idle-timeout}")
    private int idleTimeout;

    /**
     * 创建ActiveMQ连接工厂对象，用于创建ActiveMQ连接
     *
     * @return ActiveMQ连接工厂对象
     */
    @Bean
    public ConnectionFactory connectionFactory() {
        return new ActiveMQConnectionFactory(user, password, brokerUrl);
    }

    /**
     * 创建JmsTemplate对象，用于发送和接收JMS消息
     *
     * @return JmsTemplate对象
     * @author zhou  xun
     * @since 2025-10-23
     */
    @Bean
    public JmsTemplate jmsTemplate() {
        return new JmsTemplate(connectionFactory());
    }
}